
export enum WSCmd {
    /**登录 */
    Login = "Login",
    /**进入房间 */
    JoinRoom = "JoinRoom",
    /**用户准备 */
    UserReady = "UserReady",
    /**游戏开始 */
    GameStart = "GameStart",
    /**落子 */
    DropChess = "DropChess",
    /**选择吃子 */
    DropChessSelectKill = "DropChessSelectKill",
    /**游戏结束 */
    GameResult = "GameResult"
}

// 数据结构 ==============================start
/**游戏状态 */
export enum GameState {
    Wait = 1, //等待准备开始阶段
    DropPieces = 2, //摆棋阶段
    Jump = 3, //跳棋阶段
    Fly = 4, //飞棋阶段
    GameOver = 5 //游戏结束状态
}

/**棋子类别 */
export enum SeverChessPieces{
    NONE = 1,//空
    BLACK = 2,//黑子
    WHITE = 3,//白子
}

/**棋盘坐标 */
export interface ChessPoint {
    /**行 */
    Row: number
    /**列 */
    Col: number
}

/**用户 */
export interface UserData {
    /**用户ID */
    UserId?: string
    /**昵称 */
    NickName?: string
    /**头像 */
    HeadUrl?: string
    /**用户积分 */
    Score?:number
}

export interface RoomInfo{
    /**房间(对局)id */ 
    RoomId: number
    /**对局用户 */
    UserList: UserData[]
    /**房间状态 */
    State:GameState
}

export enum SeatType {
    WHITE = 1,
    BLACK
}

export enum ReadyState {
    WAIT = 1,
    READY
}

export enum PiecesType {
    WHITE = 1,
    BLACK
}

export interface UserInfo {
    SeatId?:SeatType,
    /**准备状态 */
    ReadyState?:number,
    /**剩余时间 */
    LeftTime?:number,
    /**房间ID */
    RoomId?:number,
    /**棋子类型 */
    PiecesType?:number,
    /**棋子类型 */
    Data?:UserData,
}

// 数据结构 ==============================end


// 接口协议 ==============================start
/**登录 */
export interface LoginRequest {
    /**微信code */
    WXCode: string
    /**昵称 */
    NickName: string
    /**头像 */
    HeadUrl: string
    /**头像 */
    RoomId: string
}

/**登录返回 */
export interface LoginReply {
    /**用户token */
    Token: string
    /**自己数据 */
    User: UserData
    /**房间列表 */
    RoomList:RoomInfo[]
    /**房间号 重连时，在房间中时用到*/
    RoomId :number
}


/**进入/创建 房间*/
export interface JoinRoomRequest {
    /**传0为快速创建，不为0则是加入 */
    RoomId? :number
}

/**进入/创建 房间 返回*/
export interface JoinRoomReply {
    /**用户数据 */
    UserList?: UserInfo []
}


/**用户准备 */
export interface UserReadyRequest {
    /**0取消 1准备 */
    State :number
}
/**用户准备返回 */
export interface UserReadyReply {
    /**0取消 1准备 */
    State :number
    /**坐位ID */
    SeatId:number
}

/**游戏开始 重连时直接推这个*/
export interface GameStartReply {
    /**棋盘数据 二维数组，正常开始可为空，重连回来需要 */   
    ChessData: SeverChessPieces[][] 
    /**游戏状态 */
    State: GameState
    /**当前出手用户 */
    CurOptUser:number
    /**用户数据 */
    Users:any
}

/**落子请求 */
export interface DropChessRequest {
    /**落子坐标 可连跳，所以为数组*/
    Point: ChessPoint []
}

/**吃子请求 */
export interface KillRequest {
    /**落子坐标 可连跳，所以为数组*/
    Point: ChessPoint []/**吃子列表 */
	KillPoint :ChessPoint[]
}

/**落子结果 */
export interface DropChessReply {
    /**落子坐标 可连跳，所以为数组*/
    Point: ChessPoint[]
    /**吃子列表 */
    KillPoint: ChessPoint[]
    /**游戏状态 */
    State: GameState
    /**棋盘数据 二维数组*/
    ChessData: SeverChessPieces[][]  
    /**当前操作用户 */
    CurOptUser:number 
    /**下一个出手用户 */
    NextOptUser: number
    /**出手剩余时间 */
    Timestamp:number
    /**可吃子数量 */
    CanKillCount:number
}

/**游戏结束接口 */
export interface GameResultReply {
    /**赢家颜色 */
    WinPiecesType: number
    /**赢的一方赢多少 */
    WinScore: number
    /**输的一方输多少*/
    LoseScore: number
}
// 接口协议 ==============================end